﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Collections.ObjectModel;
using GA.Shared.Interfaces;
using System.Runtime.Serialization;
using System.Windows.Data;

namespace GA.Shared.Objects
{
    public class GameClassLevel : LinkedDependencyObject
    {
        /// <summary>
        /// Identifies the Id Property.
        /// </summary>
        public static readonly DependencyProperty IdProperty =
            RegisterProperty(
                "Id",
                typeof(int),
                typeof(GameClassLevel),
                new PropertyMetadata(-1));

        /// <summary>
        /// Identifies the GameClassTypeId Property.
        /// </summary>
        public static readonly DependencyProperty GameClassTypeIdProperty =
            RegisterProperty(
                "GameClassTypeId",
                typeof(int),
                typeof(GameClassLevel),
                new PropertyMetadata(-1));

        /// <summary>
        /// Identifies the GameClassType Property.
        /// </summary>
        public static readonly DependencyProperty GameClassTypeProperty =
            RegisterProperty(
                "GameClassType",
                typeof(GameClassType),
                typeof(GameClassLevel),
                new PropertyMetadata(null));

        /// <summary>
        /// Identifies the Level Property.
        /// </summary>
        public static readonly DependencyProperty LevelProperty =
            RegisterProperty(
                "Level",
                typeof(int),
                typeof(GameClassLevel),
                new PropertyMetadata(0));

        /// <summary>
        /// Identifies the SkillTypes Property.
        /// </summary>
        public static readonly DependencyProperty SkillTypesProperty =
            RegisterProperty(
                "SkillTypes",
                typeof(ObservableCollection<SkillType>),
                typeof(GameClassLevel),
                new PropertyMetadata(null));

        /// <summary>
        /// Gets or sets the Id.
        /// </summary>
        
        public int Id
        {
            get { return (int)SafeGetValue(IdProperty); }
            set { SafeSetValue(IdProperty, value); }
        }

        /// <summary>
        /// Gets or sets the GameClassType Id.
        /// </summary>
        
        public int GameClassTypeId
        {
            get { return (int)SafeGetValue(GameClassTypeIdProperty); }
            set { SafeSetValue(GameClassTypeIdProperty, value); }
        }

        /// <summary>
        /// Gets or sets the GameClassType.
        /// </summary>
        
        public GameClassType GameClassType
        {
            get { return (GameClassType)SafeGetValue(GameClassTypeProperty); }
            set { SafeSetValue(GameClassTypeProperty, value); }
        }

        /// <summary>
        /// Gets or sets the Level.
        /// </summary>
        
        public int Level
        {
            get { return (int)SafeGetValue(LevelProperty); }
            set { SafeSetValue(LevelProperty, value); }
        }

        /// <summary>
        /// Gets or sets the SkillTypes.
        /// </summary>
        
        public ObservableCollection<SkillType> SkillTypes
        {
            get { return (ObservableCollection<SkillType>)SafeGetValue(SkillTypesProperty); }
            set { SafeSetValue(SkillTypesProperty, value); }
        }

        public GameClassLevel()
        {
        }

        public GameClassLevel(LinkedDependencyObject baseObject)
            : base(baseObject)
        {
        }

        public GameClassLevel(LinkedDependencyObject baseObject, BindingMode bindingMode) :
            base(baseObject, bindingMode)
        {
        }
    }
}
